403D - Beautiful Pairs of Numbers - CodeForces Solution


combinatorics dp *2300

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 1e3+5;
constexpr long long MOD = 1e9 + 7;

int t, n, k, dp[N][N][55];
long long nfac[N], rfac[N];

long long pw(long long n, long long k){
    if(k == 0) return 1;
    if(k == 1) return n % MOD;
    else if(k % 2 == 1){
        long long x = pw(n, k/2);
        return (x * x % MOD) * n % MOD;
    }
    else{
        long long x = pw(n, k/2);
        return (x * x % MOD);
    }
}
long long cnr(long long n, long long r){
    return (nfac[n] * rfac[r] % MOD) * rfac[n-r] % MOD;
}

int main(){
    ios::sync_with_stdio(false), cin.tie(nullptr);

    nfac[0] = 1; rfac[0] = 1;
    for(int i = 1; i < N; i++){
        nfac[i] = nfac[i-1] * i % MOD;
        rfac[i] = pw(nfac[i], MOD-2);
    }
    dp[0][0][0] = 1;
    for (int i = 0; i < N; i++){
        for (int j = 1; j < N; j++){
            for (int k = 0; k < 55; k++){
                dp[i][j][k] = dp[i][j-1][k];
                if (i >= j && k > 0)
                    dp[i][j][k] = (dp[i][j][k] + dp[i - j][j - 1][k - 1]) % MOD;
            }
        }
    }

    cin >> t;
    while (t--) {
        long long ans = 0;
        cin >> n >> k;
        if (k > 50)
            cout << 0 << '\n';
        else {
            for (int i = 1; i <= n; i++){
                ans =  (ans + (1LL * dp[i][n][k] * cnr(n - i + k, k) % MOD)) % MOD;
            }
            cout << ans * nfac[k] % MOD << '\n';
        }
    }


  return 0;
}


Comments

Submit
0 Comments
More Questions

628. Maximum Product of Three Numbers
1526A - Mean Inequality
1526B - I Hate 1111
1881. Maximum Value after Insertion
237. Delete Node in a Linked List
27. Remove Element
39. Combination Sum
378. Kth Smallest Element in a Sorted Matrix
162. Find Peak Element
1529A - Eshag Loves Big Arrays
19. Remove Nth Node From End of List
925. Long Pressed Name
1051. Height Checker
695. Max Area of Island
402. Remove K Digits
97. Interleaving String
543. Diameter of Binary Tree
124. Binary Tree Maximum Path Sum
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
501A - Contest
160A- Twins
752. Open the Lock
1535A - Fair Playoff
1538F - Interesting Function
1920. Build Array from Permutation
494. Target Sum
797. All Paths From Source to Target
1547B - Alphabetical Strings
1550A - Find The Array
118B - Present from Lena